﻿#include"XQDatabaseData.h"

QVariantList XQDatabaseData::toVariantList(bool base64,const QStringList& fields)const
{
	auto map = toVariantMap(base64,fields);
	QVariantList list;
	for (auto&field:fields)
	{
		list << std::move(map[field]);
	}
	return list;
}
QStringList XQDatabaseData::toStringList(const QStringList& fields)const
{
	QStringList list;
	for (auto& item : toVariantList(true,fields))
	{
		list << item.toString();
	}
	return list;
}
QByteArray XQDatabaseData::toJson(const QStringList& fields)const
{
	return QJsonDocument(QJsonObject::fromVariantMap(this->toVariantMap(true,fields))).toJson();
}
void XQDatabaseData::setDatas(const QStringList& datas, const QStringList& fields)
{
	QVariantList list;
	for (auto& item : datas)
	{
		list << item;
	}
	setDatas(list, true, fields);
}
void XQDatabaseData::setDatas(const QVariantList& datas, bool base64, const QStringList& fields)
{
	QStringList f=fields;//使用的字段
	if(f.isEmpty())
		f = this->fields();
	if (f.size() != f.size())
		return;
	QVariantMap map;
	for (int i = 0; i < f.size(); i++)
	{
		map[f[i]] = datas[i];
	}
	setDatas(map, base64);
}
void XQDatabaseData::setJson(const QByteArray& json)
{
	auto document = QJsonDocument::fromJson(json);
	if (document.isNull())
		return;
	auto map = document.toVariant().toJsonObject().toVariantMap();
	setDatas(map, true);
}